package schema

import (
	utils "hermestrans/basis/utils"
	"time"

	"gorm.io/gorm"
)

// 传输任务作业的字段信息
type Job struct {
	Id                   string    `json:"id" bson:"id"`                                   //无J开头的作业编号  key
	CreaterId            string    `json:"createrId" bson:"createrId"`                     //创建者编号
	Creater              string    `json:"creater" bson:"creater"`                         //创建者名字
	UpdaterId            string    `json:"updaterId" bson:"updaterId"`                     //更新者编码
	Updater              string    `json:"updater" bson:"updater"`                         //更新者名字
	CreateDate           time.Time `json:"createDate" bson:"createDate"`                   //创建时间"yyyy-MM-dd HH:mm:ss"格式
	UpdateDate           time.Time `json:"updateDate" bson:"updateDate"`                   //更新时间
	Status               string    `json:"status" bson:"status"`                           //状态:   key
	DataMap              string    `json:"dataMap" bson:"dataMap"`                         //数据map
	Code                 string    `json:"code" bson:"code"`                               //J开头的作业编号 key
	Name                 string    `json:"name" bson:"name"`                               //作业名称 key
	JobType              string    `json:"jobType" bson:"jobType"`                         //作业类型：循环和非循环  key
	StartHour            string    `json:"startHour" bson:"startHour"`                     //开始时间：时
	EndHour              string    `json:"endHour" bson:"endHour"`                         //结束时间：时
	StartMin             string    `json:"startMin" bson:"startMin"`                       //开始时间：分
	EndMin               string    `json:"endMin" bson:"endMin"`                           //结束时间：分
	RunNum               string    `json:"runNum" bson:"runNum"`                           //运行数量
	Encoding             string    `json:"encoding" bson:"encoding"`                       //编码
	ScanInterval         string    `json:"scanInterval" bson:"scanInterval"`               //扫描间隔
	TransferType         string    `json:"transferType" bson:"transferType"`               //传输类型
	IsRegular            bool      `json:"isRegular" bson:"isRegular"`                     //是否正则表达式匹配时传输
	CreateDesDir         string    `json:"createDesDir" bson:"createDesDir"`               //
	DeleteAfterTransfer  bool      `json:"deleteAfterTransfer" bson:"deleteAfterTransfer"` //传输完删除
	IsRecursive          bool      `json:"isRecursive" bson:"isRecursive"`                 //是否遍历子目录
	IsEncrypt            bool      `json:"isEncrypt" bson:"isEncrypt"`                     //是否加密
	SrcFlagFileName      string    `json:"srcFlagFileName" bson:"srcFlagFileName"`         //flag文件名
	SrcFilePath          string    `json:"srcFilePath" bson:"srcFilePath"`                 //文件路径
	SrcFileName          string    `json:"srcFileName" bson:"srcFileName"`                 //文件名
	DestFlagFileName     string    `json:"destFlagFileName" bson:"destFlagFileName"`       //flag文件名
	DestFilePath         string    `json:"destFilePath" bson:"destFilePath"`               //文件路径
	DestFileName         string    `json:"destFileName" bson:"destFileName"`               //文件名
	Describle            string    `json:"describle" bson:"describle"`                     //作业描述
	SrcNodeId            string    `json:"scrNodeId" bson:"srcNodeId"`                     //源节点Id  key
	DestNodeId           string    `json:"destNodeId" bson:"destNodeId"`
	LastRunTime          string    `json:"lastRunTime" bson:"lastRunTime"`                   //最近运行时间
	LastRunMsg           string    `json:"lastRunMsg" bson:"lastRunMsg"`                     //最近运行消息
	LastRunStatus        string    `json:"lastRunStatus" bson:"lastRunMsg"`                  //最近运行状态
	SourceFrom           string    `json:"sourceFrom" bson:"sourceFrom"`                     //来源:WS,WEB
	Item                 string    `json:"item" bson:"item"`                                 //item
	HasChangeStatusPower string    `json:"hasChangeStatusPower" bson:"hasChangeStatusPower"` //是否有改变状态的权利
	HasEditPower         string    `json:"hasEditPower" bson:"hasEditPower"`                 //是否有编辑的权限                              //
	SrcNodeName          string    `json:"srcNodeName" bson:"srcNodeName"`                   //源节点名  key
	FromView             string    `json:"fromView" bson:"fromView"`                         //
	DestNodeName         string    `json:"destNodeName" bson:"destNodeName"`                 //目标节点名 key
	SrcNodeIp            string    `json:"srcNodeIp" bson:"srcNodeIp"`
	DestNodeIp           string    `json:"destNodeIp" bson:"destNodeIp"`
}

// 传输任务执行日志的字段信息
type TaskLog struct {
	Id               string    `json:"id" bson:"id"`                             //任务流水号
	TaskId           string    `json:"taskId" bson:"taskId"`                     //任务id
	JobCode          string    `json:"jobCode" bson:"jobCode"`                   //作业流水
	RequestUserId    string    `json:"requestUserId" bson:"requestUserId"`       //请求方类型
	ConfigVer        string    `json:"configVer" bson:"configVer"`               //配置版本
	JobVer           string    `json:"jobVer" bson:"jobVer"`                     //作业版本
	ScanFileCount    int       `json:"scanFileCount" bson:"scanFileCount"`       //扫描文件数量
	SkipFileCount    int       `json:"skipFileCount" bson:"skipFileCount"`       //跳过文件数量
	RunFileCount     int       `json:"runFileCount" bson:"runFileCount"`         //传输文件数量
	ErrorFileCount   int       `json:"errorFileCount" bson:"errorFileCount"`     //失败文件数量
	StartDate        time.Time `json:"startDate" bson:"startDate"`               //开始时间
	Status           int       `json:"status" bson:"status"`                     //状态
	CreateDate       time.Time `json:"createDate" bson:"createDate"`             //创建时间
	FinishDate       time.Time `json:"finishDate" bson:"finishDate"`             //结束时间
	ExtraDate        time.Time `json:"extraDate" bson:"extraDate"`               //额外的时间
	Msg              string    `json:"msg" bson:"msg"`                           //消息
	HasBack          string    `json:"hasBack" bson:"hasBack"`                   //是否有回
	Files            string    `json:"files" bson:"files"`                       //文件数
	SeqNo            string    `json:"seqNo" bson:"seqNo"`                       //序列号
	StatusView       string    `json:"statusView" bson:"statusView"`             //状态显示
	SrcNodeNameView  string    `json:"srcNodeNameView" bson:"srcNodeNameView"`   //源节点名
	JobType          string    `json:"jobType" bson:"jobType"`                   //作业类型
	JobNameView      string    `json:"jobNameView" bson:"jobNameView"`           //作业名字
	SrcNodeCode      string    `json:"srcNodeCode" bson:"srcNodeCode"`           //源节点编码
	DestNodeNameView string    `json:"destNodeNameView" bson:"destNodeNameView"` //目标节点名
}

type AdminUserEditPassReq struct {
	Uid         int    `form:"id"`
	OldPassword string `form:"old_password" label:"原始密码" binding:"required"`
	NewPassword string `form:"new_password" label:"新密码" binding:"required"`
	SubPassword string `form:"sub_password" label:"确认密码" binding:"required"`
}

type AdminUsers struct {
	Uid       uint   `gorm:"primary_key;auto_increment"`
	GroupName string `gorm:"size:20;comment:'用户组名称'"`
	Username  string `gorm:"size:100;comment:'用户名'"`
	Nickname  string `gorm:"size:100;comment:'姓名'"`
	Password  string `gorm:"size:200;comment:'密码'"`
	Phone     string `gorm:"size:20;comment:'手机号'"`
	LastLogin string `gorm:"size:30;comment:'最后登录ip地址'"`
	Salt      string `gorm:"size:32;comment:'密码盐'"`
	ApiToken  string `gorm:"size:32;comment:'用户登录凭证'"`
	Header    string `gorm:"size:20;comment:'头部皮肤'"`
	Logo      string `gorm:"size:20;comment:'logo皮肤'"`
	Side      string `gorm:"size:20;comment:'侧边栏皮肤'"`
	CreatedAt time.Time
	UpdatedAt time.Time
}

func (au *AdminUsers) TableName() string {
	return "admin_users"
}

func (au *AdminUsers) FillData(db *gorm.DB) {
	//初始化管理员
	salt := utils.RandString(6)
	passwordSalt := utils.Encryption("111111", salt)
	adminUser := AdminUsers{
		Uid:       1,
		GroupName: "superadmin",
		Username:  "admin",
		Nickname:  "管理员",
		Password:  passwordSalt,
		Phone:     "",
		LastLogin: "",
		Salt:      salt,
		ApiToken:  "",
		Header:    "default",
		Logo:      "default",
		Side:      "default",
	}
	db.Save(&adminUser)
}

func (au *AdminUsers) GetConnName() string {
	return "default"
}
